package br.edu.ifrn.mb;

import java.util.List;

import br.edu.ifrn.dao.DiretoriaDAO;
import br.edu.ifrn.dao.EmpresaDAO;
import br.edu.ifrn.dominio.Diretoria;
import br.edu.ifrn.dominio.Empresa;
import br.edu.ifrn.exception.NegocioException;
import br.edu.ifrn.generic.GenericDAO;
import br.edu.ifrn.mb.generic.GenericCrudMB;
import br.edu.ifrn.util.FacesUtil;

public class ManageEmpresa extends GenericCrudMB<Empresa> {
	private String nome;
	
	public ManageEmpresa() {
		super();
		this.exibirTodosRegistrosAoPesquisar = false;
		if(!FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.setWhereScope(" WHERE empresa.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId());
		}
	}
	
	@Override
	protected GenericDAO<Empresa> getDao() {
		return new EmpresaDAO();
	}

	@Override
	public String getTitulo() {
		return "Empresa";
	}
	
	@Override
	public String incluir() {
		if(!FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.dadosForm.setDiretoria(FacesUtil.getSessionUser().getDiretoria());
		}
		return super.incluir();
	}
	
	public List<Diretoria> getDiretorias(){
		try {
			return new DiretoriaDAO().consultarTodos();
		} catch (NegocioException e) {
			FacesUtil.adicionarMensagemErro("Não foi possível consultar as diretorias");
			e.printStackTrace();
			return null;
		}
	}
	
	public void filtrar() throws NegocioException {
		if(FacesUtil.getSessionUser().getUsuario().isAdministrador()){
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE UPPER(empresa.nome) LIKE '%"+this.nome.toUpperCase()+"%' OR UPPER(empresa.nomeFantasia) LIKE '%"+this.nome.toUpperCase()+"%'", " ORDER BY empresa.nome ASC");
		}else{
			this.dadosPesquisa = this.getDao().consultarTodos(" WHERE UPPER(empresa.nome) LIKE '%"+this.nome.toUpperCase()+"%' OR UPPER(empresa.nomeFantasia) LIKE '%"+this.nome.toUpperCase()+"%' AND empresa.diretoria.id = "+FacesUtil.getSessionUser().getDiretoria().getId() , " ORDER BY empresa.nome ASC");
		}
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}
}
